package org.example.rabbitmq.product.config.rabbitmq;

import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.example.rabbitmq.common.message.MessageFail;
import org.example.rabbitmq.common.util.MqUtil;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author hzq
 * @date 2021/11/24 18:01
 */
@Slf4j
@Component
@AllArgsConstructor
public class RabbitSendFailSaveToDb {

    private final RabbitTemplate rabbitTemplate;

    /**
     * 把失败消息保存到数据库
     * 然后设置定时任务重发
     *
     * @param messageFail 失败消息体
     */
    public void saveToMysql(MessageFail messageFail) {
        // todo 保存到数据库 msgId 唯一的
        log.error(messageFail.toString());

    }

    /**
     * 每个小时执行一次
     */
    @Scheduled(cron = "0 0 0/1 * * ?")
    public void resendMessage() {
        List<MessageFail> messageFails = messageFails();
        MqUtil.batchResendMessageFails(rabbitTemplate, messageFails);
    }

    /**
     * 查询消息投递失败列表
     *
     * @return 消息列表
     */
    List<MessageFail> messageFails() {

        // todo 查询并且删除消息失败列表

        return null;
    }

}
